<?php
/**
 * 分库分表方法集合
 */
class CShardedMethod {
	private static $_model = null;
	
	public static function model() {
		self::$_model == null && self::$_model = new self;
		return self::$_model;
	}
	
	public function __call($method, $args) {
		throw new Exception(__CLASS__.'.'.$method.' is not exists!');
	}
	
	public function exists($method) {
		return method_exists($this, $method);
	}
	
	public function hash($string, $offset = 1) {
		return substr(md5($string), $offset-1, 1);
	}
	
	public function mod8($number) {
		return $number % 8;
	}
	
	public function mod16($number) {
		return $number % 16;
	}
	
	public function mod64($number) {
		return $number % 64;
	}
	
	/**
	 * 用户中心使用，DB分割逻辑
	 */
	public function modOrHashDb($value) {
		if(preg_match("#^\d+$#", $value)) {
			return dechex( intval( ($value/16) % 16 ) );
		} else {
			return substr(md5($value), 1, 1);
		}
	}
	
	/**
	 * 用户中心使用，table分割逻辑
	 */
	public function modOrHashTable($value) {
		if(preg_match("#^\d+$#", $value)) {
			return dechex($value % 16);
		} else {
			return substr(md5($value), 0, 1);
		}
	}
}